package com.boot;

import com.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

/**
 * @author
 * @date 2025-07-27
 * @Description @SpringBootApplication ： 表示当前类是个配置类
 * <p>
 * `@SpringBootConfiguration`表示当前的类是一个配置类，但对于启动程序而言， 配置类是以参数的形式传递的
 * <p>
 * * 也就是说这个注解暂时也没有什么用
 * <p>
 * 我们当前的程序只是单纯的启动了springboot本身，并没有与任何框架整合。所以不需要自动配置
 * <p>
 * * 也就是说`@EnableAutoConfiguration`暂时没有用。
 */
//@SpringBootApplication
public class SpringBootMain {
    public static void main(String[] args) {
        // 传入当前 类  --配置类
        // * 执行run方法时，传递的是一个配置类，但不一定非的是当前的主类。
        //
        //* 所以主类和配置类可以不是一个  （官方推荐用一个）
//        ApplicationContext applicationContext = SpringApplication.run(MyConfig.class);
        ApplicationContext applicationContext = SpringApplication.run(new Class[]{SpringBootMain.class}, args);
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName); // 也能输出配置类信息
        }
    }

    // 这样只会注入 myConfig 这对象 并不会加载  MyConfig 上的ComponentScan

    @Bean
    public MyConfig myConfig() {
        return new MyConfig();
    }
}
